/*
 * Stage.java
 *
 * Created on 2007. m�rcius 25., 14:46
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package lemmings;

/**
 *
 * @author attila
 * Az aktu�lisan j�tszott szintet reprezent�l� oszt�ly
 */
public class Stage {
    private Field fields[][];
    private int sizeX;					///	Ennyi mezobol all a jatekter
    private int sizeY;					///	Ennyi mezobol all a jatekter
    private int fieldSizeX;				/// Egy mezo merete pixelben
    private int fieldSizeY;				/// Egy mezo merete pixelben
    private final int fullSizeX=400;	/// A jatekter merete pixelben
    private final int fullSizeY=300;	/// A jatekter merete pixelben
    
    /** Konstruktor 
     * @param n
     * Oszlopok szama
     * @param m
     * Sorok szama
     * */
    public Stage(int n,int m) {   
        fields=new Field[n][m];
        
        sizeX=n;
        sizeY=m;
        
        Double d1=new Double(fullSizeX/n);
        fieldSizeX=d1.intValue();
        Double d2=new Double(fullSizeY/m);
        fieldSizeY=d2.intValue();
        
        // Hozzuk l�tre a mez�ket:
        for (int i=0;i<n;i++){
        	for (int j=0;j<m;j++){
        		fields[i][j]=new Field();
        	}
        }
        
        // �ll�tsuk be, hogy ismerj�k a szomsz�daikat:
        // Ismerj�k a felett�k l�v�t:
        for (int i=0; i<n; i++) {
            for (int j=1; j<m; j++)
                fields[i][j].setNeighbour(fields[i][j-1], 0);
        }
        
        // Ismerj�k a t�l�k balra l�v�t:
        for (int i=1; i<n; i++) {
            for (int j=0; j<m; j++)
                fields[i][j].setNeighbour(fields[i-1][j], 1);
        }
        
        // Ismerj�k az alattuk l�v�t:
        for (int i=0; i<n; i++) {
            for (int j=0; j<(m-1); j++)
                fields[i][j].setNeighbour(fields[i][j+1], 2);
        }
        
        // Ismerj�k a t�l�k jobbra l�v�t:
        for (int i=0; i<(n-1); i++) {
            for (int j=0; j<m; j++)
                fields[i][j].setNeighbour(fields[i+1][j], 3);
        }
    }
    
    /**
    * Visszaadja az adott koordin�t�n tal�lhat� mez�t
    * @param x
    * X koordin�ta
    * @param y
    * Y koordin�ta
    * @return 
    * Egy mez� objektum
    */
    public Field whatIsOnCoord(int x, int y) {
        // Remelem mukodik, sok rohadt kerekites...
    	Double n,m;
    	System.out.println("################whatisoncoord:"+x+" "+y+" "+fieldSizeX+" "+fieldSizeY);
        n=Math.floor(x/fieldSizeX);
        m=Math.floor(y/fieldSizeY);
    	
        return fields[n.intValue()][m.intValue()];    	
        //return fields[x-1][y-1];
    }
    
    
    /**
    * Bet�lt egy szintet
    * @param stage
    * A szint neve 
    */    
    public boolean loadStage(String stage) {
    	// Ez szerintem total felesleges.
        return true; 
    }
    /**
    * A j�t�k egy id�egys�gnyi l�ptet�se
    */    
    public String tick() {
        System.out.println("> Stage.tick()");
        
        // null�zuk az action�ket:
         for (int j=0;j<sizeY;j++){
    		for (int i=0;i<sizeX;i++){
    			fields[i][j].setLemmingActionFlagNull();
    		}
    	}       
        // H�vjuk meg az actiont:
        for (int j=0;j<sizeY;j++){
    		for (int i=0;i<sizeX;i++){
    			fields[i][j].action();
    		}
    	}
        System.out.println(this.toString());
        return this.toString();
    }
    
    /**
     * Beallitja a jatekter m. soranak n. mezojet.
     * 
     * A c�mz�s alapvet�en a specifik�ci�ban 1..n, 1..m k�z�tt volt
     * Javaban 0..n-1, 0..m-1 k�z�tt van
     * => �t kell indexelni.
     * */
    public void setFieldProp(int n, int m, FieldProp fp){
    	fp.setParent(fields[n-1][m-1]);
    	fields[n-1][m-1].setProp(fp);
    }
    /**
     * Stringkent adja a vissza a palyamatrixot, teszteleshez pont jo lesz.
     * */
    public String toString(){
    	String ret=new String();
    	for (int j=0;j<sizeY;j++){
    		for (int i=0;i<sizeX;i++){
    			ret=ret.concat(fields[i][j].toString());
    		}
    		ret=ret.concat("\n");
    	}
    	
    	return ret;
    }
}
